﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.IO;
using BusinessLayer.Functions;

namespace BusinessLayer.Pos
{
    public class InterMpos2001
    {
        string app_location;

        public string AppLocation
        {
            get { return app_location; }
            set { app_location = value; }
        }

        public string UrunTaksit(DataTable urunler, params string[] location)
        {
            string sonuc = "";
            try
            {
                string pluno = "";
                string stok_adi = "";
                decimal fiyat = 0;
                string convFiyat = "";

                StreamWriter sw = new StreamWriter(app_location + "\\URUNTKST.DAT", false, System.Text.Encoding.GetEncoding("ibm857"));
                string line = "";
                for (int i = 0; i < urunler.Rows.Count; i++)
                {
                    pluno = urunler.Rows[i][0].ToString();
                    stok_adi = urunler.Rows[i][1].ToString();
                    fiyat = Convert.ToDecimal(urunler.Rows[i][2]);
                    if (pluno.Length < 6)
                    {
                        pluno = sifir(6 - pluno.Length) + pluno;
                    }

                    if (stok_adi.Length < 20)
                    {
                        stok_adi = boslukEkle(20 - stok_adi.Length, stok_adi);
                    }
                    else
                    {
                        stok_adi = stok_adi.Substring(0, 20);
                    }

                    convFiyat = fiyat.ToString().Replace(",", ".");
                    if (convFiyat.IndexOf(".") > -1)
                    {
                        if (convFiyat.Length > convFiyat.IndexOf(".") + 3)
                        {
                            convFiyat = convFiyat.Substring(0, convFiyat.IndexOf(".") + 3);
                        }
                    }


                    if (convFiyat.Length < 10)
                    {
                        convFiyat = sifir(10 - convFiyat.Length) + convFiyat;
                    }

                    line = pluno + "," + stok_adi + "," + convFiyat;


                    if (line.Length == 38)
                    {
                        sw.Write(line + System.Environment.NewLine);
                    }
                }

                sw.Close();

                foreach (string dosya in location)
                {
                    File.Copy(app_location + "\\URUNTKST.DAT", dosya + "\\URUNTKST.DAT", true);
                }
            }
            catch (Exception ex)
            {
                sonuc = ex.Message;
            }
            return sonuc;
        }

        string boslukEkle(int adet, string deger)
        {
            string retdeger = deger;
            for (int i = 0; i < adet; i++)
            {
                retdeger += " ";
            }
            return retdeger;
        }

        string sifir(int adet)
        {
            string sifirlar = "";
            for (int i = 0; i < adet; i++)
            {
                sifirlar += "0";
            }
            return sifirlar;
        }

        string convLine(string line)
        {
            char[] harf = line.ToCharArray();
            string return_line = "";
            foreach (char item in harf)
            {
                if (char.IsNumber(item) == true)
                {
                    return_line += item.ToString();
                }
                else
                {
                    return_line += "0";
                }
            }
            return return_line;
        }

        public void MesajYaz(bool yeniFormat, bool urunDat, bool urunTks, bool cariDat, params string[] location)
        {
            int kasano = 1;

            if (yeniFormat)
            {
                for (int i = 0; i < location.Length; i++)
                {
                    StreamWriter sw = new StreamWriter(location[i] + "\\Mesaj." + kasano.ToString("000"), false, System.Text.Encoding.GetEncoding("ibm857"));
                    string line = "114abcdefghijklmnopqrstuvw";
                    if (urunDat == true)
                    {
                        line = line.Replace("b", "1");
                    }
                    if (urunTks == true)
                    {
                        line = line.Replace("l", "1");
                    }
                    if (cariDat == true)
                    {
                        line = line.Replace("c", "1");
                    }
                    line = convLine(line);
                    sw.WriteLine(line);
                    sw.Close();
                    kasano++;
                }
            }
            else
            {
                for (int i = 0; i < location.Length; i++)
                {
                    StreamWriter sw = new StreamWriter(location[i] + "\\Mesaj." + kasano.ToString("000"), false, System.Text.Encoding.GetEncoding("ibm857"));
                    string line = "";
                    if (urunDat == true)
                    {
                        line = "107100000000000";
                    }
                    if (urunTks == true)
                    {
                        line = "119000000000000";
                    }
                    if (cariDat == true)
                    {
                        line = "108100000000000";
                    }
                    line = convLine(line);
                    sw.WriteLine(line);
                    sw.Close();
                    kasano++;
                }
            }
        }


        //private void Karma_Koli_Export(DataTable urunler, params string[] locations)
        //{
        //    // KARMA.DAT() 

        //    // İÇERİĞİ: 

        //    // TEXT DOSYADIR, SATIRLAR crlf İLE SONLANIR. ALANLAR “,” İLE AYRILIR. 1 KAYDIN 
        //    // UZUNLUĞU 47 BYTE DIR. BARKODA GÖRE SIRALI OLMALIDIR. 

        //    // bbbbbbbbbbbbbbbbbbbb, aaaaaa, pppppp, ffffffffffcrlf 

        //    // bbbbbbbbbbbbbbbbbbbb : KARMA KOLİNİN BARKODU 20 BYTE SAĞDA BOŞLUKLARLA 
        //    // TAMAMLANIR() 
        //    // aaaaaa : VERİLECEK ÜRÜNÜN ADEDİ. 6 BYTE. FORMATI ( kk.ggg) 
        //    // pppppp : VERİLECEK ÜRÜNÜN PLU NUMARASI 6 BYTE SOLDA “0” LARLA 
        //    // TAMAMLANIR. 
        //    // ffffffffff : VERİLECEK ÜRÜNÜN FİYATI. 10 BYTE SOLDA “0” LARLA TAMAMLANIR. 
        //    // ÖRNEK: 0000011.25 (11YTL 25 YKr) 
        //    // crlf : ASCII 13 + ASCII 10. ( 2 BYTE ) 

        //    string barkod = "";
        //    string pluno = "";
        //    string alt_fiyat = "";
        //    string recete_fiyat = "";
        //    int tip = 0;
        //    int fiyat_tip = 0;
        //    string miktar = "";

        //    StreamWriter sw = new StreamWriter(app_location + "\\KARMA.DAT", false);

        //    for (int i = 0; i <= urunler.Rows.Count - 1; i++)
        //    {

        //        tip = Convert.ToInt32(urunler.Rows[i]["recete_tip"]);
        //        barkod = urunler.Rows[i]["barkod"].ToString();

        //        miktar = String.Format(Convert.ToDecimal(urunler.Rows[i]["recete_alt_stok_miktar"]).ToString(), "00.000");
        //        miktar = miktar.Replace(",", ".");

        //        alt_fiyat = String.Format(Convert.ToDecimal(urunler.Rows[i]["recete_alt_stok_fiyat"]).ToString(), "0000000.00");
        //        alt_fiyat = alt_fiyat.Replace(",", ".");

        //        recete_fiyat = String.Format(Convert.ToDecimal(urunler.Rows[i]["recete_alt_stok_recete_fiyat"]).ToString(), "0000000.00");
        //        recete_fiyat = recete_fiyat.Replace(",", ".");

        //        fiyat_tip = Convert.ToInt32(urunler.Rows[i]["recete_fiyat_kontrol"]);
        //        pluno = urunler.Rows[i]["recete_alt_stok_id"].ToString();
        //        pluno = String.Format(pluno, "000000");


        //        if (barkod.Length < 20)
        //        {
        //            barkod = barkod + Strings.Space(20 - barkod.Length);
        //        }
        //        else
        //        {
        //            barkod = Strings.Mid(barkod, 1, 20);
        //        }

        //        if (fiyat_tip == 1)
        //        {
        //            sw.WriteLine(barkod + "," + miktar + "," + pluno + "," + recete_fiyat);
        //        }
        //        else
        //        {
        //            sw.WriteLine(barkod + "," + miktar + "," + pluno + "," + alt_fiyat);
        //        }
        //    }

        //    sw.Close();

        //    foreach (string dosya in locations)
        //    {
        //        File.Copy(app_location + "\\KARMA.DAT", dosya, true);
        //    }
        //}


        //private void Toptan_dat(DataTable urunler, params string[] location)
        //{

        //    // TOPTAN.DAT(İÇERİĞİ) 

        //    //TEXT DOSYADIR,SATIRLAR crlf İLE SONLANIR. ALANLAR “,” İLE AYRILIR. 1 KAYDIN 
        //    //UZUNLUĞU 22 BYTE DIR. PLU NUMARASINA GÖRE SIRALI OLMALIDIR. 

        //    // nnnnnn, dd, ttttttttttcrlf 

        //    //nnnnnn : ÜRÜNÜN PLU NUMARASI (6 BYTE). SOLDA “0” LARLA TAMAMLANIR. 
        //    //dd : 2 BYTE, TOPTAN SATIŞTA KULLANILACAK DEPARTMAN NUMARASI 
        //    //tttttttttt : TOPTAN SATILACAK ÜRÜNÜN FİYATI 10 BYTE. SOLDA “0” LARLA TAMAMLANIR. 
        //    // ÖRNEK: 0000011.25 (11YTL 25 YKr) 
        //    //crlf : ASCII 13 + ASCII 10 . ( 2 BYTE ) 

        //    if (urunler.Rows.Count > 0)
        //    {
        //        DataView data_dv = new DataView(urunler);
        //        StreamWriter sw = new StreamWriter(app_location + "\\TOPTAN.DAT", false);

        //        int stokid = 0;
        //        int kdv = 0;
        //        decimal fiyat = default(decimal);

        //        data_dv.RowFilter = "FIYAT > 0";
        //        data_dv.Sort = "stok_id ASC";

        //        string _stkid = "";
        //        string _kdv = "";
        //        string _fiyat = "";

        //        for (int i = 0; i <= data_dv.Count - 1; i++)
        //        {
        //            stokid = Convert.ToInt32(data_dv[i]["stok_id"]);
        //            kdv = Convert.ToInt32(data_dv[i]["FIYAT"]);
        //            fiyat = Convert.ToDecimal(data_dv[i]["Toptankdv"]);

        //            _stkid = String.Format(stokid.ToString(), "000000");
        //            _kdv = String.Format(kdv.ToString(), "00");
        //            _fiyat = String.Format(fiyat.ToString(), "0000000.00");
        //            sw.WriteLine(_stkid + _kdv + _fiyat);
        //        }
        //        sw.Close();
        //    }

        //    foreach (string dosya in locations)
        //    {
        //        File.Copy(app_location + "\\KARMA.DAT", dosya, true);
        //    }
        //}

        //private void InterPOS_Urun_Exp(DataTable urunler, params string[] location)
        //{
        //    try
        //    {
        //        string dosya = null;

        //        if (Directory.Exists(P4) == true)
        //        {
        //            if (Rd_Tum.Checked == true)
        //            {
        //                dosya = "\\URUN.DAT";
        //            }
        //            else
        //            {
        //                dosya = "\\TEKURUN.DAT";
        //            }

        //            DataSet ds = new DataSet();
        //            SqlConnection cn2 = new SqlConnection(Cnn_String);
        //            SqlDataAdapter adapter = new SqlDataAdapter("SELECT COUNT(DISTINCT stok_id) FROM PW_" + Firma_Kod + "_BARKOD", cn2);

        //            cn2.Open();
        //            adapter.Fill(ds);

        //            Prg_Min = 0;
        //            Prg_Max = Conversion.Val(urunler.Rows(0)(0));
        //            Prg_Percent = 0;

        //            SqlCommand cmd = new SqlCommand();
        //            cmd.Connection = cn2;
        //            cmd.CommandText = "EXEC PW_" + Firma_Kod + "_INTER_URUN_EXP @P1='" + P1 + "' ,@P2='" + P2 + "',@P3=" + P3;
        //            cmd.CommandTimeout = 999999;

        //            SqlDataReader rd = cmd.ExecuteReader;
        //            int i = 0;

        //            StreamWriter Barkod_File = new StreamWriter(P4 + "\\BARKOD.IDX", false);
        //            StreamWriter Pluno_File = new StreamWriter(P4 + "\\PLUNO.IDX", false);
        //            StreamWriter Urun_File = new StreamWriter(P4 + dosya, false, System.Text.Encoding.GetEncoding("ibm857"));

        //            string stokid = null;
        //            string barcode = null;
        //            string barkod = null;
        //            string stock_adi = null;
        //            string price = null;
        //            string Cprice = null;
        //            string kdv = null;
        //            string birim = null;
        //            string scale = null;
        //            string sira = null;

        //            DataSet Sorted_dataset = new DataSet();
        //            Sorted_dataset.Tables.Add("PLUNO");
        //            Sorted_dataset.Tables("PLUNO").Columns.Add("ID", typeof(string));
        //            Sorted_dataset.Tables("PLUNO").Columns.Add("SIRANO", typeof(string));

        //            sira = 1;
        //            while (rd.Read)
        //            {
        //                if (BgWorker.CancellationPending == true)
        //                {
        //                    return;
        //                }
        //                stokid = Strings.Format(Conversion.Val(rd(0)), "000000");
        //                barcode = rd(1);
        //                barkod = Strings.Mid(barcode, 1, 20);
        //                stock_adi = Strings.Mid(rd(2).ToString, 1, 20);
        //                price = Strings.Mid(Strings.Format(Conversion.Val(rd(5)), "000000.00"), 1, 9);
        //                kdv = Strings.Format(Conversion.Val(rd(3)), "00");
        //                birim = Strings.Mid(rd(6).ToString, 1, 4);
        //                scale = rd(4);

        //                Cprice = Strings.Replace(price, ",", ".");

        //                if (scale == 2 | scale == 3)
        //                {
        //                    scale = "E";
        //                }
        //                else
        //                {
        //                    scale = "H";
        //                }
        //                sira = Strings.Format(Conversion.Val(sira), "000000");

        //                Barkod_File.WriteLine(barkod + Strings.Space(20 - Strings.Len(barkod)) + sira);
        //                Sorted_dataset.Tables("PLUNO").Rows.Add(stokid, sira);

        //                Urun_File.WriteLine("1" + stokid + barcode + Strings.Space(20 - Strings.Len(barcode)) + stock_adi + Strings.Space(20 - Strings.Len(stock_adi)) + Cprice + kdv + Strings.Mid(birim, 1, 4) + Strings.Space(4 - Strings.Len(Strings.Mid(birim, 1, 4))) + scale);
        //                Prg_Percent += 1;
        //                sira = sira + 1;
        //            }
        //            Barkod_File.Close();

        //            Urun_File.Close();

        //            cn2.Close();

        //            DataView Sort_View = new DataView(Sorted_dataset.Tables("PLUNO"));
        //            Sort_View.Sort = "ID ASC";

        //            for (int k = 0; k <= Sorted_dataset.Tables("PLUNO").Rows.Count - 1; k++)
        //            {
        //                Pluno_File.WriteLine(Sort_View(k)("ID").ToString + Sort_View(k)("SIRANO").ToString);
        //            }

        //            Pluno_File.Close();
        //        }
        //        else
        //        {

        //            Interaction.MsgBox(P4 + Cls_Language.GetLanguage("1915000938", " Geçerli Bir Dosya Yolu Değil"));
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        Interaction.MsgBox(ex.Message);
        //    }

        //}


        public string InterPOS_Cari_Exp(DataTable cariler, params string[] location)
        {
            string sonuc = "";
            if (cariler.Rows.Count > 0)
            {
                try
                {

                    DataSet ds = new DataSet();

                    StreamWriter CariKod_File = new StreamWriter(app_location + "\\CARIKOD.IDX", false);
                    StreamWriter CariNo_File = new StreamWriter(app_location + "\\CARINO.IDX", false);
                    StreamWriter Cari_File = new StreamWriter(app_location + "\\CARI.DAT", false, System.Text.Encoding.GetEncoding("ibm857"));

                    string CariId = "";
                    string CariKod = "";
                    string CariUnvan = "";
                    string CariSatir = "";
                    string Adres = "";
                    string VDaire = "";
                    string Vno = "";
                    string Discount = "";
                    string Toplam_Satir = "";

                    int sira = 1;

                    DataSet Sorted_dataset = new DataSet();
                    Sorted_dataset.Tables.Add("CARI");
                    Sorted_dataset.Tables["CARI"].Columns.Add("ID", typeof(string));
                    Sorted_dataset.Tables["CARI"].Columns.Add("SIRANO", typeof(string));

                    for (int i = 0; i < cariler.Rows.Count; i++)
                    {
                        CariId = Strings.Format(Convert.ToInt32(cariler.Rows[i][0]), "000000");
                        CariKod = Strings.Mid(cariler.Rows[i][1].ToString(), 1, 20);
                        //CariKod = CariKod.Replace(, " ");
                        //CariKod = CariKod.Replace(Strings.Chr(10), " ");

                        if (Strings.Len(CariKod) < 20)
                        {
                            CariKod = CariKod + Strings.Space(20 - Strings.Len(CariKod));
                        }

                        CariUnvan = cariler.Rows[i][2].ToString();

                        if (string.IsNullOrEmpty(cariler.Rows[i][3].ToString()) == false)
                        {
                            Adres = cariler.Rows[i][3].ToString();
                        }
                        else
                        {
                            Adres = "";
                        }


                        CariSatir = CariUnvan + " " + Adres;

                        if (Strings.Len(CariSatir) < 80)
                        {
                            CariSatir = CariSatir + Strings.Space(80 - Strings.Len(CariSatir));
                        }
                        else
                        {
                            CariSatir = Strings.Mid(CariSatir, 1, 80);
                        }

                        VDaire = Strings.Mid(cariler.Rows[i][4].ToString(), 1, 15);
                        if (Strings.Len(VDaire) < 15)
                        {
                            VDaire = VDaire + Strings.Space(15 - Strings.Len(VDaire));
                        }

                        Vno = Strings.Mid(cariler.Rows[i][5].ToString(), 1, 15);
                        if (Strings.Len(Vno) < 15)
                        {
                            Vno = Vno + Strings.Space(15 - Strings.Len(Vno));
                        }

                        Discount = Strings.Format(Convert.ToInt32(cariler.Rows[i][6]), "00");


                        Sorted_dataset.Tables["CARI"].Rows.Add(CariKod, Strings.Format(sira, "000000"));
                        Toplam_Satir = "1" + CariId + CariKod + CariSatir + VDaire + Vno + Discount + Strings.Format(02, "00") + Strings.Space(20);
                        //Toplam_Satir = Toplam_Satir.Replace(Strings.Chr(13), " ");
                        //Toplam_Satir = Toplam_Satir.Replace(Strings.Chr(10), " ");

                        Cari_File.WriteLine(Toplam_Satir);
                        CariNo_File.WriteLine(CariId + Strings.Format(sira, "000000"));

                        sira = sira + 1;
                    }
                    Cari_File.Close();
                    CariNo_File.Close();

                    DataView Sort_View = new DataView(Sorted_dataset.Tables["CARI"]);
                    Sort_View.Sort = "ID ASC";

                    for (int k = 0; k <= Sorted_dataset.Tables["CARI"].Rows.Count - 1; k++)
                    {
                        CariKod_File.WriteLine(Sort_View[k]["ID"].ToString() + Sort_View[k]["SIRANO"].ToString());
                    }

                    CariKod_File.Close();

                    for (int i = 0; i < location.Length; i++)
                    {
                        File.Copy(app_location + "\\CARIKOD.IDX", location[i] + "\\CARIKOD.IDX", true);
                        File.Copy(app_location + "\\CARINO.IDX", location[i] + "\\CARINO.IDX", true);
                        File.Copy(app_location + "\\CARI.DAT", location[i] + "\\CARI.DAT", true);
                    }

                }
                catch (Exception ex)
                {
                    sonuc = ex.Message;
                }
            }
            return sonuc;
        }
    }
}
